/**
 *
 * @param table {Table}
 * @param auth {boolean} 接口是否需要鉴权
 * @param uninstall {boolean} 是否在生成代码时注释该方法，用于备用
 * @returns {string}
 */
const saveAll = (table, auth = false, uninstall = false) => {
  const {
    idType,
    comment,
    names: {TabName}
  } = table
  return `// <-
    /**
     * ${comment} 批量新增数据
     *
     * @param list {@link List<${TabName}>} 新增对象集合
     * @return {@link List<${TabName}>} 新增对象集合
     */
    public List<${TabName}> saveAll(final List<${TabName}> list) {
        final SQLInsertClause batchInsert = getQueryFactory().insert(table);
        list.forEach(obj -> obj.insert(batchInsert).get().addBatch());
        final List<${idType}> ids = batchInsert.executeWithKeys(table.id);  // 警告：如果 id 不是数据库自动生成的，这里返回的 id 集合则为 null；需要换成 execute() 方法，并校验插入行数
        for (int i = 0; i < ids.size(); i++) {
            list.get(i).setId(ids.get(i));
        }
        return list;
    }
`.split('\n')
    .map(row => (uninstall ? '//' : '') + row)
    .join('\n')
}
export const saveAllOpenInstall = table => saveAll(table)
export const saveAllOpenUninstall = table => saveAll(table, false, true)

export const saveAllAuthInstall = table => saveAll(table, true, false)
export const saveAllAuthUninstall = table => saveAll(table, true, true)
